/*
  品牌管理所有接口函数模块

  不同请求方式：
    GET    查
    POST   增
    PUT    改
    DELETE 删
  
  基于以上请求方式定义的接口，称为restful风格的接口
*/
import request from "@/utils/request";
import type {
  GetTrademarkListApiResponse,
  TrademarkItem,
  TrademarkList,
} from "./model/trademarkModel";

// 枚举类型
// 用来统一定义接口请求地址
enum Api {
  getTrademarkListUrl = "/admin/product/baseTrademark",
  getAllTrademarkListUrl = "/admin/product/baseTrademark/getTrademarkList",
  saveTrademarkUrl = "/admin/product/baseTrademark/save",
  updateTrademarkUrl = "/admin/product/baseTrademark/update",
  removeTrademarkUrl = "/admin/product/baseTrademark/remove",
}

/*
  接口函数命名尽量和普通功能函数区别，所以我们加上api或req等
  接口函数需不需要参数？
    看接口文档，对应的接口需不需要携带请求参数
    如果两个或两个以下参数会直接写，三个参数以上会写成对象形式

     path参数
       request.get(`/xxx/${page}/${limit}`)
     query参数
       request.get(`/xxx`, { params: { xxx, yyy } })
     body参数
       request.post(`/xxx`, { xxx, yyy })
*/
/**
 * 获取品牌分页列表
 * @param page 当前页码
 * @param limit 每页条数
 * @returns GetTrademarkListApiResponse
 */
export const getTrademarkListApi = (page: number, limit: number) => {
  // 必须return，外面调用接口函数才能得到返回值
  // 真实发送请求地址：/admin/product/baseTrademark/1/3
  // path参数位于地址栏，直接写就好
  /*
    get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;

    第二个泛型参数就是请求回来的数据类型
  */
  return request.get<any, GetTrademarkListApiResponse>(
    Api.getTrademarkListUrl + `/${page}/${limit}`
  );
};

/**
 * 获取所有品牌列表数据
 * @returns TrademarkList
 */
export const getAllTrademarkListApi = () => {
  return request.get<any, TrademarkList>(Api.getAllTrademarkListUrl);
};

/**
 * 添加品牌
 * @param tmName 品牌名称
 * @param logoUrl 品牌logo
 * @returns null
 */
export const saveTrademarkApi = (tmName: string, logoUrl: string) => {
  // post put delete没有响应数据，响应数据都是null
  return request.post<any, null>(Api.saveTrademarkUrl, {
    tmName,
    logoUrl,
  });
};

/**
 * 修改品牌
 * @param trademark TrademarkItem
 * @returns null
 */
export const updateTrademarkApi = (trademark: TrademarkItem) => {
  return request.put<any, null>(Api.updateTrademarkUrl, trademark);
};

/**
 * 删除品牌
 * @param id 品牌id
 * @returns null
 */
export const removeTrademarkApi = (id: number) => {
  return request.delete<any, null>(Api.removeTrademarkUrl + `/${id}`);
};
